#include <cstdio>
#include <cstring>

struct Node
{
    int l, r, d;
    int buf[ 55 ];
};

Node a[ 131072 ];
int k, n, ans;

int cal( int i, int j )
{
    return i * ( i - 1 ) / 2 + j;
}

void add( int p, int l, int r, int c, int aa )
{
    if ( l < a[ p ].l ) l = a[ p ].l;
    if ( r > a[ p ].r ) r = a[ p ].r;
    if ( l > a[ p ].r || r < a[ p ].l ) return ;
    if ( l == a[ p ].l && r == a[ p ].r )
    {
        a[ p ].buf[ cal( k, ( aa % k + k - l % k ) % k ) ] += c;
        return ;
    }
    add( p * 2, l, r, c, aa );
    add( p * 2 + 1, l, r, c, aa );
}

void query( int p, int l, int r )
{
    if ( l < a[ p ].l ) l = a[ p ].l;
    if ( r > a[ p ].r ) r = a[ p ].r;
    if ( l > a[ p ].r || r < a[ p ].l ) return ;
    if ( a[ p ].l == a[ p ].r )
    {
        int i, ret = a[ p ].d;
        for ( i = 1; i <= 10; i++ )
        {
            ret += a[ p ].buf[ cal( i, 0 ) ];
        }
        ans = ret;
        return ;
    }
    int i, j;
    for ( i = 1; i <= 10; i++ )
    {
        for ( j = 0; j < i; j++ )
        {
            a[ p * 2 ].buf[ cal( i, j ) ] += a[ p ].buf[ cal( i, j ) ];
            a[ p * 2 + 1 ].buf[ cal( i, ( i + j - ( a[ p * 2 + 1 ].l - a[ p * 2 ].l ) % i ) % i ) ] += a[ p ].buf[ cal( i, j ) ];
        }
    //    printf("%d:%d ", a[ p ].buf[ 7 ][ i - 1 ], a[ p * 2 + 1 ].buf[ 7 ][ 0 ]);
    //    a[ p ].buf[ i ] = 0;
    }
    memset( a[ p ].buf, 0, sizeof( a[ p ].buf ) );
    query( p * 2, l, r );
    query( p * 2 + 1, l, r );
}

void init( )
{
    int i, j, p = 1;
    while ( p < n ) p <<= 1;
    for ( i = p; i < p * 2; i++ )
    {
        a[ i ].l = a[ i ].r = i - p + 1;
        a[ i ].d = 0;
        memset( a[ i ].buf, 0, sizeof( a[ i ].buf ) );
    }
    for ( i = p - 1; i > 0; i-- )
    {
        a[ i ].l = a[ i * 2 ].l;
        a[ i ].r = a[ i * 2 + 1 ].r;
        a[ i ].d = 0;
        memset( a[ i ].buf, 0, sizeof( a[ i ].buf ) );
    }
    for ( i = 0; i < n; i++ )
        scanf("%d", &a[ p + i ].d);
}

void work( )
{
    int i, q, cmd, aa, bb, cc;
    scanf("%d", &q);
    while ( q-- )
    {
        scanf("%d", &cmd);
        if ( cmd == 1 )
        {
            scanf("%d%d%d%d", &aa, &bb, &k, &cc);
            add( 1, aa, bb, cc, aa );
        }
        else
        {
            scanf("%d", &aa);
            query( 1, aa, aa );
            printf("%d\n", ans);
        }
    }
}

int main( )
{
    while ( scanf("%d", &n) != EOF )
    {
        init( );
        work( );
    }
    return 0;
}
